home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / bin / foo2zjs-wrapper < prev    next >
Text File  |  2009-10-19  |  19KB  |  743 lines

  1. #!/bin/sh
  2.  
  3. #* Copyright (C) 2003-2006  Rick Richardson
  4. #*
  5. #* This program is free software; you can redistribute it and/or modify
  6. #* it under the terms of the GNU General Public License as published by
  7. #* the Free Software Foundation; either version 2 of the License, or
  8. #* (at your option) any later version.
  9. #*
  10. #* This program is distributed in the hope that it will be useful,
  11. #* but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. #* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. #* GNU General Public License for more details.
  14. #*
  15. #* You should have received a copy of the GNU General Public License
  16. #* along with this program; if not, write to the Free Software
  17. #* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18. #*
  19. #* Authors: Rick Richardson <rick.richardson@comcast.net>
  20.  
  21. VERSION='$Id: foo2zjs-wrapper.in,v 1.119 2009/05/11 17:35:55 rick Exp $'
  22.  
  23. #
  24. # Printer Notes:
  25. #
  26. # Minolta/QMS 2300 DL    - Does not need clipping, -X16, or -P.  But it doesn't
  27. #              break anything if you use them.
  28. #
  29. # Minolta/QMS 2200 DL    - Requires -X16 (which is on by default)
  30. #            - Requires clipping
  31. #
  32. # HP LaserJet 1000    - Same as 2200 DL, plus needs -P
  33. # HP LaserJet 1005    - Same as 2200 DL, plus needs -P
  34. # HP LaserJet 1018    - Same as 2200 DL, plus needs -P -z1 -L0
  35. # HP LaserJet 1020    - Same as 2200 DL, plus needs -P -z1 -L0
  36. # HP LaserJet P2035    - Same as 2200 DL, plus needs -P -z1 -L0
  37. #
  38.  
  39. PROGNAME="$0"
  40. BASENAME=`basename $PROGNAME`
  41. PREFIX=/usr
  42. SHARE=$PREFIX/share/foo2zjs
  43. PATH=$PATH:/sw/bin:/opt/local/bin
  44.  
  45. #
  46. #    Log the command line, for debugging and problem reports
  47. #
  48. if [ -x /usr/bin/logger -o -x /bin/logger ]; then
  49.     logger -t "$BASENAME" -p lpr.info -- "$BASENAME $@" </dev/null
  50. fi
  51.  
  52. usage() {
  53.     cat <<EOF
  54. Usage:
  55.     $BASENAME [options] [ps-file]
  56.  
  57.     Foomatic printer wrapper for the foo2zjs printer driver.
  58.     This script reads a Postscript ps-file or standard input
  59.     and converts it to Zenographics ZjStream printer format.
  60.  
  61. Normal Options:
  62. -c                Print in color (else monochrome)
  63. -C colormode      Colormode [$COLORMODE]
  64.                     1=Photos, 2=Photo and text, 3=Graphics and text
  65.                     10=ICM color profile (using -G *.icm file)
  66. -d duplex         Duplex code to send to printer [$DUPLEX]
  67.                     1=off, 2=longedge, 3=shortedge
  68. -m media          Media code to send to printer [$MEDIA]
  69.                     1=standard, 2=transparency, 3=glossy, 257=envelope,
  70.                     259=letterhead, 261=thickstock, 262=postcard, 263=labels
  71. -p paper          Paper code [$PAPER]
  72.                     1=letter, 5=legal, 7=executive, 9=A4, 11=A5, 13=B5
  73.                     20=env#10, 27=envDL 28=envC5 34=envB5 37=envMonarch
  74. -n copies         Number of copies [$COPIES]
  75. -r <xres>x<yres>  Set device resolution in pixels/inch [$RES]
  76. -s source         Source code to send to printer [$SOURCE]
  77.                     1=upper, 2=lower, 4=manual, 7=auto
  78.             Code numbers may vary with printer model.
  79. -t                Draft mode.  Every other pixel is white.
  80. -2/-3/-4/-6/-8/-10/-12/-14/-15/-16/-18
  81.                   Print with N-up (requires psutils)
  82. -o orient         For N-up: -op is portrait, -ol is landscape, -os is seascape.
  83.  
  84. Printer Tweaking Options:
  85. -u <xoff>x<yoff>  Set offset of upper left printable in pixels [varies]
  86. -l <xoff>x<yoff>  Set offset of lower right printable in pixels [varies]
  87. -L mask           Send logical clipping values from -u/-l in ZjStream [3]
  88.                   0=no, 1=Y, 2=X, 3=XY
  89. -P                Do not output START_PLANE codes.  May be needed by some
  90.                   monochrome-only printers.
  91. -X padlen         Add extra zero padding to the end of BID segments [16]
  92. -z model          Model: 0=2300DL 1=hp1020 [0]
  93.  
  94. Color Tweaking Options:
  95. -g gsopts         Additional options to pass to Ghostscript, such as
  96.                   -dDITHERPPI=nnn, etc.  May appear more than once. []
  97. -G profile.icm    Convert profile.icm to a Postscript CRD using icc2ps and
  98.                   adjust colors using the setcolorrendering PS operator.
  99.                   $SHARE/icm/ will be searched for profile.icm.
  100. -I intent         Select profile intent from ICM file [$INTENT]
  101.                   0=Perceptual, 1=Colorimetric, 2=Saturation, 3=Absolute
  102. -G gamma-file.ps  Prepend gamma-file to the Postscript input to perform
  103.                   color correction using the setcolortransfer PS operator.
  104.  
  105. Debugging Options:
  106. -S plane          Output just a single color plane from a color print [all]
  107.                   1=Cyan, 2=Magenta, 3=Yellow, 4=Black
  108. -D lvl            Set Debug level [$DEBUG]
  109. -V                $VERSION
  110. EOF
  111.  
  112.     exit 1
  113. }
  114.  
  115. #
  116. #       Report an error and exit
  117. #
  118. error() {
  119.     echo "$BASENAME: $1" >&2
  120.     exit 1
  121. }
  122.  
  123. dbgcmd() {
  124.     if [ $DEBUG -ge 1 ]; then
  125.         echo "$@" >&2
  126.     fi
  127.     "$@"
  128. }
  129.  
  130. #
  131. #    N-up-ify the job.  Requires psnup from psutils package
  132. #
  133. nup() {
  134.     case "$NUP" in
  135.     [2368]|1[0458])
  136.     tr '\r' '\n' | psnup $NUP_ORIENT -d2 -$NUP -m.3in -p$paper -q
  137.     ;;
  138.     [49]|1[26])
  139.     tr '\r' '\n' | psnup $NUP_ORIENT -d2 -$NUP -m.5in -p$paper -q
  140.     ;;
  141.     *)
  142.     error "Illegal call to nup()."
  143.     ;;
  144.     esac
  145. }
  146.  
  147. #
  148. #       Process the options
  149. #
  150.  
  151. # Try to use a local copy of GhostScript 8.54, if available.  Otherwise,
  152. # fallback to whatever the Linux distro has installed (usually 7.07)
  153. #
  154. # N.B. := operator used here, when :- would be better, because "ash"
  155. # doesn't have :-
  156. if gs.foo -v >/dev/null 2>&1; then
  157.         GSBIN=${GSBIN:-gs.foo}
  158. else
  159.         GSBIN=${GSBIN:-gs}
  160. fi
  161.  
  162. CMDLINE="$*"
  163. DEBUG=0
  164. DUPLEX=1
  165. COLOR=
  166. COLORMODE=default
  167. MODEL=0
  168. QUALITY=wts
  169. MEDIA=1
  170. COPIES=1
  171. test -r /etc/papersize && PAPER=$(cat /etc/papersize)
  172. test "$PAPER" || PAPER=1
  173. RES=1200x600
  174. SOURCE=7
  175. NUP=
  176. CLIP_UL=
  177. CLIP_LR=
  178. CLIP_LOG=
  179. BC=
  180. AIB=
  181. NOPLANES=
  182. COLOR2MONO=
  183. GAMMAFILE=
  184. INTENT=0
  185. GSOPTS=
  186. EXTRAPAD=
  187. SAVETONER=
  188. NUP_ORIENT=
  189. GSDEV=-sDEVICE=pbmraw
  190. # What mode to use if the user wants us to pick the "best" mode
  191. case `$GSBIN --version` in
  192. 7*)    DEFAULTCOLORMODE=10
  193.     DEFAULTCOLORMODE=2
  194.     ;;
  195. 8.1*)
  196.     DEFAULTCOLORMODE=2
  197.     QUALITY=1
  198.     ;;
  199. *)    DEFAULTCOLORMODE=2
  200.     ;;
  201. esac
  202. while getopts "1:23456789o:b:cC:d:g:l:u:L:m:n:p:q:r:s:tz:ABS:D:G:I:PX:Vh?" opt
  203. do
  204.     case $opt in
  205.     b)    GSBIN="$OPTARG";;
  206.     c)    COLOR=-c;;
  207.     d)    DUPLEX="$OPTARG";;
  208.     g)    GSOPTS="$GSOPTS $OPTARG";;
  209.     m)    MEDIA="$OPTARG";;
  210.     n)    COPIES="$OPTARG";;
  211.     p)    PAPER="$OPTARG";;
  212.     q)    QUALITY="$OPTARG";;
  213.     r)    RES="$OPTARG";;
  214.     s)    SOURCE="$OPTARG";;
  215.     t)    SAVETONER="-t";;
  216.     z)    MODEL="$OPTARG";;
  217.     l)    CLIP_LR="-l $OPTARG";;
  218.     u)    CLIP_UL="-u $OPTARG";;
  219.     L)    CLIP_LOG="-L $OPTARG";;
  220.     A)    AIB=-A;;
  221.     B)    BC=-B;;
  222.     C)    COLORMODE="$OPTARG";;
  223.     S)    COLOR2MONO="-S$OPTARG";;
  224.     D)    DEBUG="$OPTARG";;
  225.     G)    GAMMAFILE="$OPTARG";;
  226.     I)    INTENT="$OPTARG";;
  227.     P)    NOPLANES=-P;;
  228.     X)    EXTRAPAD="-X $OPTARG";;
  229.     [234689])    NUP="$opt";;
  230.     [57])    error "Can't find acceptable layout for $opt-up";;
  231.     1)    case "$OPTARG" in
  232.         [024568])    NUP="1$OPTARG";;
  233.         *)    error "Can't find acceptable layout for 1$OPTARG-up";;
  234.         esac
  235.         ;;
  236.     o)    case "$OPTARG" in
  237.         l*)    NUP_ORIENT=-l;;
  238.         s*)    NUP_ORIENT=-r;;
  239.         p*|*)    NUP_ORIENT=;;
  240.         esac;;
  241.     V)    echo "$VERSION"; foo2zjs -V; foo2zjs-pstops -V; exit 0;;
  242.     h|\?)
  243.         if [ "$CMDLINE" != "-?" -a "$CMDLINE" != -h ]; then
  244.             echo "Illegal command:"
  245.             echo "    $0 $CMDLINE"
  246.             echo
  247.         fi
  248.         usage;;
  249.     esac
  250. done
  251. shift `expr $OPTIND - 1`
  252.  
  253. #
  254. # If there is an argument left, take it as the file to print.
  255. # Else, the input comes from stdin.
  256. #
  257. if [ $# -ge 1 ]; then
  258.     if [ "$LPJOB" = "" ]; then
  259.     : # LPJOB="$1"
  260.     fi
  261.     exec < $1
  262. fi
  263.  
  264. #
  265. case "$QUALITY" in
  266. 0)
  267.     GSOPTS="-dCOLORSCREEN $GSOPTS"
  268.     ;;
  269. 1)
  270.     GSOPTS="-dCOLORSCREEN $GSOPTS"
  271.     ;;
  272. 2)
  273.     GSOPTS="-dMaxBitmap=500000000 $GSOPTS"
  274.     ;;
  275. wts)
  276.     GSOPTS="-dCOLORSCREEN -dMaxBitmap=500000000 $GSOPTS"
  277.     ;;
  278. esac
  279.  
  280. #
  281. #    Validate model code
  282. #
  283. case "$MODEL" in
  284. 0|1)    ;;
  285. *)    error "Unknown model code $MODEL";;
  286. esac
  287.  
  288. #
  289. #    Validate media code
  290. #
  291. case "$MEDIA" in
  292. 1|standard)    MEDIA=1;;
  293. 2|transparency)    MEDIA=2;;
  294. 3|glossy)    MEDIA=3;;
  295. 257|envelope)    MEDIA=257;;
  296. 259|letterhead)    MEDIA=259;;
  297. 261|thickstock)    MEDIA=261;;
  298. 262|postcard)    MEDIA=262;;
  299. 263|labels)    MEDIA=263;;
  300. [0-9]*)        ;;
  301. *)        error "Unknown media code $MEDIA";;
  302. esac
  303.  
  304. #
  305. #    Validate source (InputSlot) code
  306. #
  307. case "$SOURCE" in
  308. 1|upper)    SOURCE=1;;
  309. 2|lower)    SOURCE=2;;
  310. 4|manual)    SOURCE=4;;
  311. 7|auto)        SOURCE=7;;
  312. [0-9]*)        ;;
  313. *)        error "Unknown source code $SOURCE";;
  314. esac
  315.  
  316. #
  317. #    Validate Duplex code
  318. #
  319. case "$DUPLEX" in
  320. 1|off|none)    DUPLEX=1;;
  321. 2|long*)    DUPLEX=2;;
  322. 3|short*)    DUPLEX=3;;
  323. [0-9]*)        ;;
  324. *)        error "Unknown duplex code $DUPLEX";;
  325. esac
  326.  
  327. #
  328. #    Validate Resolution
  329. #
  330. case "$RES" in
  331. 600x600)    ;;
  332. 1200x600)    ;;
  333. 2400x600)    ;;
  334. *)        error "Illegal resolution $RES";;
  335. esac
  336.  
  337. #
  338. #    Figure out the paper dimensions in pixels/inch, and set the
  339. #    default clipping region.  Unfortunately, this is a trouble
  340. #    area for ZjStream printers.  Various versions of ZjS print
  341. #    engines react differently when asked to print into their
  342. #    unprintable regions.
  343. #
  344. #    The Minolta 2200 DL is sensitive to its unprintable regions,
  345. #    and will pixel skew if you try to print there.
  346. #
  347. #    The HP1000 will print blank pages when asked to print into its
  348. #    unprintable region.
  349. #
  350. #    The Minolta 2300 DL doesn't care if print into the unprintable
  351. #    region.  It will do the clipping itself.  This is as it should be.
  352. #    But it won't hurt it if we do the clipping here.
  353. #
  354. set_clipping() {
  355.     ulx=$1; uly=$2
  356.     lrx=$3; lry=$4
  357.  
  358.     # Set clipping region if it isn't already set
  359.     if [ "$CLIP_UL" = "" ]; then
  360.     case "$RES" in
  361.     600x600)    ulx=`expr $ulx / 2`;;
  362.     2400x600)    ulx=`expr $ulx \* 2`;;
  363.     esac
  364.     CLIP_UL="-u ${ulx}x${uly}"
  365.     fi
  366.     if [ "$CLIP_LR" = "" ]; then
  367.     case "$RES" in
  368.     600x600)    lrx=`expr $lrx / 2`;;
  369.     2400x600)    lrx=`expr $lrx \* 2`;;
  370.     esac
  371.     CLIP_LR="-l ${lrx}x${lry}"
  372.     fi
  373. }
  374.  
  375. case "$PAPER" in
  376. Custom*)
  377.         case "$PAPER" in
  378.         Custom\.[0-9]*\x[0-9]*)
  379.             XDIM=`echo "$PAPER" | sed -e 's/Custom\.//' -e 's/x.*//'`
  380.             YDIM=`echo "$PAPER" | sed -e 's/Custom\.//' -e 's/.*x//'`
  381.             ;;
  382.         *)
  383.         #%%BeginFeature: *CustomPageSize True
  384.         #216
  385.         #360
  386.         #0
  387.         #0
  388.         #0
  389.         #pop pop pop pop pop
  390.  
  391.         #%%BeginFeature: *CustomPageSize True
  392.         #792.000000 612.000000 1 0.000000 0.000000
  393.         #pop pop pop pop pop
  394.  
  395.         if [ $DEBUG = 0 ]; then
  396.             TMPFILE=/tmp/cus$$
  397.         else
  398.             TMPFILE=/tmp/custom.ps
  399.         fi
  400.         cat >$TMPFILE
  401.         exec <$TMPFILE
  402.  
  403.         tmp=`head -n 10000 $TMPFILE \
  404.             | sed -n '/CustomPageSize/{n;p;n;p;}' \
  405.             | tr '\n' ' '`
  406.         case "$tmp" in
  407.         [0-9]*\ [0-9]*)
  408.             XDIM=`echo "$tmp" | sed 's/ .*//'`
  409.             YDIM=`echo "$tmp" | sed -e 's/^[^ ]* //' -e 's/ .*//'`
  410.             ;;
  411.         *)
  412.             if [ $DEBUG = 0 ]; then rm -f $TMPFILE; fi
  413.             error "Custom page size [XY]DIM != 1-99999"
  414.             ;;
  415.         esac
  416.         ;;
  417.         esac
  418.         XDIM=`dc -e "$XDIM 1200* 72/p"`
  419.         YDIM=`dc -e "$YDIM 600* 72/p"`
  420.         PAPER=256;        paper=letter;
  421.         MEDIA=261
  422.                 set_clipping 2 100     2 100
  423.         ;;
  424. 1|letter)    PAPER=1;    paper=letter;    XDIM="10200"; YDIM="6600"
  425.         case "$MODEL" in
  426.         0)    set_clipping 204 102    204 106;;
  427.         1)    set_clipping 192 96    192 96;;
  428.         # 1)    set_clipping 96 96    288 96;;
  429.         esac
  430.         ;;
  431. 5|legal)    PAPER=5;    paper=legal;     XDIM="10200"; YDIM="8400"
  432.         case "$MODEL" in
  433.         0)    set_clipping 204 102    204 106;;
  434.         1)    set_clipping 192 96    192 96;;
  435.         esac
  436.         ;;
  437. 7|executive)    PAPER=7;    paper=executive; XDIM="8700";  YDIM="6300"
  438.         case "$MODEL" in
  439.         0)    set_clipping 206 102    206 102;;
  440.         1)    set_clipping 192 96    192 96;;
  441.         esac
  442.         ;;
  443. 9|a4|A4)    PAPER=9;    paper=a4;        XDIM="9920";  YDIM="7016"
  444.         case "$MODEL" in
  445.         0)
  446.             if [ "$NOPLANES" != "" -a "$RES" = 600x600 ]; then
  447.             # Hack fix for LJ1000
  448.             set_clipping 224 100    224 100
  449.             else
  450.             # 2200DL
  451.             set_clipping 200 100    200 100
  452.             fi
  453.             ;;
  454.         1)    set_clipping 192 96    192 96;;
  455.         esac
  456.         ;;
  457. 11|a5|A5)    PAPER=11;    paper=a5;        XDIM="6992";  YDIM="4960"
  458.         case "$MODEL" in
  459.         0)    set_clipping 200 100    200 100;;
  460.         1)    set_clipping 192 96    192 96;;
  461.         esac
  462.         ;;
  463. 13|b5|B5)    PAPER=13;    paper=b5;        XDIM="8598";  YDIM="6070"
  464.         case "$MODEL" in
  465.         0)    set_clipping 207 107    207 107;;
  466.         1)    set_clipping 192 96    192 96;;
  467.         esac
  468.         ;;
  469. 20|"env#10")    PAPER=20;    paper=env10;     XDIM="4950";  YDIM="5700"
  470.         case "$MODEL" in
  471.         0)    set_clipping 171 78    171 78;;
  472.         1)    set_clipping 171 78    171 78;;
  473.         esac
  474.         ;;
  475. 27|envDL)    PAPER=27;    paper=envDL;     XDIM="5200";  YDIM="5200"
  476.         case "$MODEL" in
  477.         0)    set_clipping 176 84    176 84;;
  478.         1)    set_clipping 176 84    176 84;;
  479.         esac
  480.         ;;
  481. 28|envC5)    PAPER=28;    paper=envC5;     XDIM="7650";  YDIM="5408"
  482.         case "$MODEL" in
  483.         0)    set_clipping 170 80    169 80;;
  484.         1)    set_clipping 170 80    169 80;;
  485.         esac
  486.         ;;
  487. 34|envB5)    PAPER=34;    paper=envB5;     XDIM="8316";  YDIM="5892"
  488.         case "$MODEL" in
  489.         0)    set_clipping 174 74    174 74;;
  490.         1)    set_clipping 174 74    174 74;;
  491.         esac
  492.         ;;
  493. 37|envMonarch)    PAPER=37;    paper=envMonarch;XDIM="4650";  YDIM="4500"
  494.         case "$MODEL" in
  495.         0)    set_clipping 174 78    173 78;;
  496.         1)    set_clipping 174 78    173 78;;
  497.         esac
  498.         ;;
  499. *)        error "Unimplemented paper code $PAPER";;
  500. esac
  501. # e.g. /usr/share/ghostscript/7.07/lib/gs_statd.ps
  502. PAPERSIZE="-sPAPERSIZE=$paper";
  503.  
  504. case "$RES" in
  505. 600x600)    XDIM=`expr $XDIM / 2`;;
  506. 1200x600)    ;;
  507. 2400x600)    XDIM=`expr $XDIM \* 2`;;
  508. esac
  509. DIM="${XDIM}x${YDIM}"
  510.  
  511. #
  512. # Filter thru psnup if N-up printing has been requested
  513. #
  514. case $NUP in
  515. [234689]|1[024568])    PREFILTER="nup";;
  516. *)            PREFILTER=cat;;
  517. esac
  518. if [ "$DEBUG" -ge 9 ]; then
  519.     PREFILTER="tee /tmp/$BASENAME.ps"
  520. fi
  521.  
  522. #
  523. #    Overload -G.  If the file name ends with ".icm" or ".ICM"
  524. #    then convert the ICC color profile to a Postscript CRD,
  525. #    then prepend it to the users job.  Select the intent
  526. #    using the -I option.
  527. #
  528.  
  529. create_crd() {
  530.     #
  531.     # Create a Postscript CRD
  532.     #
  533.     ICC2PS=$PREFIX/bin/foo2zjs-icc2ps
  534.     if [ -x $ICC2PS ]; then
  535.     case "$GAMMAFILE" in
  536.     none | none.icm | */none.icm)
  537.         ;;
  538.     *)
  539.         if [ -x /usr/bin/logger ]; then
  540.         logger -t "$BASENAME" -p lpr.info -- \
  541.         "`basename $ICC2PS` -o $GAMMAFILE -t$INTENT > $ICCTMP.crd.ps"
  542.         fi
  543.         $ICC2PS -o $GAMMAFILE -t$INTENT > $ICCTMP.crd.ps 2>$ICCTMP.log \
  544.         || error "Problem converting .ICM file to Postscript"
  545.         ;;
  546.     esac
  547.  
  548.     PSTOPS_OPTS="$PSTOPS_OPTS -c"
  549.     cat > $ICCTMP.usecie.ps <<-EOF
  550.         %!PS-Adobe-3.0
  551.         <</UseCIEColor true>>setpagedevice
  552.     EOF
  553.     if [ "$QUALITY" = wts ]; then
  554.         cat >> $ICCTMP.usecie.ps <<-EOF
  555.         << /UseWTS true >> setuserparams
  556.         <<
  557.             /AccurateScreens true
  558.             /HalftoneType 1
  559.             /HalftoneName (Round Dot Screen) cvn
  560.             /SpotFunction { 180 mul cos exch 180 mul cos add 2 div}
  561.             /Frequency 137
  562.             /Angle 37
  563.         >> sethalftone
  564.         EOF
  565.     fi
  566.     cat > $ICCTMP.selcrd.ps <<-EOF
  567.         /Current /ColorRendering findresource setcolorrendering
  568.     EOF
  569.     case "$GAMMAFILE" in
  570.     none | none.icm | */none.icm) GAMMAFILE="$ICCTMP.usecie.ps";;
  571.     *)    GAMMAFILE="$ICCTMP.usecie.ps $ICCTMP.crd.ps $ICCTMP.selcrd.ps";;
  572.     esac
  573.     else
  574.     GAMMFILE=
  575.     fi
  576. }
  577.  
  578. if [ $DEBUG -gt 0 ]; then
  579.     ICCTMP=/tmp/icc
  580. else
  581.     ICCTMP=/tmp/icc$$
  582. fi
  583.  
  584. if [ "" = "$COLOR" ]; then
  585.     COLORMODE=
  586.     GAMMAFILE=
  587. else
  588.     case "$COLORMODE" in
  589.     default)    COLORMODE=$DEFAULTCOLORMODE;;
  590.     esac
  591.     case "$GAMMAFILE" in
  592.     default)    GAMMAFILE=DL2312.icm;;
  593.     esac
  594. fi
  595.  
  596. CRDBASE="$PREFIX/share/foo2zjs/crd"
  597. case "$RES" in
  598.     600x600)    SCREEN=screen1200.ps;;
  599.     1200x600)    SCREEN=screen1200.ps;;
  600.     2400x600)    SCREEN=screen2400.ps;;
  601. esac
  602.  
  603. PSTOPS_OPTS="-n"
  604.  
  605. case "$COLORMODE" in
  606. 0|"")
  607.     # Monochrome
  608.     ;;
  609. 10|icm)
  610.     # Use old ICM method
  611.     AIB=-A
  612.     BC=-B
  613.     case "$GAMMAFILE" in
  614.     none | none.icm | */none.icm)
  615.     create_crd
  616.     ;;
  617.     *.icm|*.ICM|*.icc|*.ICC)
  618.     #
  619.     # Its really an .ICM file, not a gamma file.
  620.     #
  621.     # The file can be a full path name, or the name of a file in $SHARE/icm/
  622.     #
  623.     if [ -r "$GAMMAFILE" ]; then
  624.         create_crd
  625.     elif [ -r "$SHARE/icm/$GAMMAFILE" ]; then
  626.         GAMMAFILE="$SHARE/icm/$GAMMAFILE"
  627.         create_crd
  628.     else
  629.         GAMMAFILE=
  630.     fi
  631.     ;;
  632.     esac
  633.     ;;
  634. 1|photo)
  635.     # Photo
  636.     GAMMAFILE="$CRDBASE/prolog.ps"
  637.     GAMMAFILE="$GAMMAFILE $CRDBASE/2300w-1200@150-l250-kx,ucr125,75-per.crd"
  638.     GAMMAFILE="$GAMMAFILE $CRDBASE/$SCREEN"
  639.     ;;
  640. 2|graphics)
  641.     # Photo and Text
  642.     GAMMAFILE="$CRDBASE/prolog.ps"
  643.     #GAMMAFILE="$GAMMAFILE $CRDBASE/2300w-1200@150-l250-kx,ucr100,75-per.crd"
  644.     GAMMAFILE="$GAMMAFILE $CRDBASE/kh.crd"
  645.     GAMMAFILE="$GAMMAFILE $CRDBASE/$SCREEN"
  646.     ;;
  647. 3|text)
  648.     # Graphic and Text
  649.     GAMMAFILE="$CRDBASE/prolog.ps"
  650.     #GAMMAFILE="$GAMMAFILE $CRDBASE/2300w-1200@150-l250-kx,ucr100,50-per.crd"
  651.     GAMMAFILE="$GAMMAFILE $CRDBASE/kx.crd"
  652.     GAMMAFILE="$GAMMAFILE $CRDBASE/$SCREEN"
  653.     ;;
  654. 4|tonersave)
  655.     # Reduced toner
  656.     GAMMAFILE="$CRDBASE/prolog.ps"
  657.     GAMMAFILE="$GAMMAFILE $CRDBASE/2300w-1200@150-l250-kx,ucr100,0-per.crd"
  658.     GAMMAFILE="$GAMMAFILE $CRDBASE/$SCREEN"
  659.     ;;
  660. *.crd)
  661.     GAMMAFILE="$CRDBASE/prolog.ps"
  662.     if [ -f $COLORMODE ]; then
  663.     GAMMAFILE="$GAMMAFILE $COLORMODE"
  664.     elif [ -f $CRDBASE/$COLORMODE ]; then
  665.     GAMMAFILE="$GAMMAFILE $CRDBASE/$COLORMODE"
  666.     else
  667.     error "Can't find CRD '$COLORMODE' in . or in $CRDBASE"
  668.     fi
  669.     GAMMAFILE="$GAMMAFILE $CRDBASE/$SCREEN"
  670.     ;;
  671. *)
  672.     error "Unknown color method '$COLORMODE'"
  673.     ;;
  674. esac
  675.  
  676. if [ "$COLOR" != "" -a "$QUALITY" = wts ]; then
  677.     PSTOPS_OPTS="$PSTOPS_OPTS -w"
  678. fi
  679.  
  680. if [ "" != "$COLOR" ]; then
  681.     if [ "" = "$AIB" -a "" = "$BC" ]; then
  682.     # Faster, but can't handle AllIsBlack or BlackClears
  683.     GSDEV=-sDEVICE=pksmraw
  684.     else
  685.     # Can't handle different size pages
  686.     GSDEV=-sDEVICE=bitcmyk
  687.     fi
  688. fi
  689.  
  690. #
  691. #    Figure out USERNAME
  692. #
  693. if [ "$LPUSER" != "" ]; then
  694.     USER="$LPUSER@$LPHOST"
  695. else
  696.     USER=""
  697. fi
  698.  
  699. #
  700. #    Main Program, just cobble together the pipeline and run it
  701. #
  702. #    The malarky with file descriptors 1 and 3 is to avoid a bug in
  703. #    (some versions?) of Ghostscript where Postscript's stdout gets
  704. #    intermingled with the printer drivers output, resulting in
  705. #    corrupted image data.
  706. #
  707. GS="$GSBIN -q -dBATCH -dSAFER -dQUIET -dNOPAUSE"
  708.  
  709. foo2zjs-pstops $PSTOPS_OPTS | \
  710. $PREFILTER \
  711. | ($GS $PAPERSIZE -g$DIM -r$RES $GSDEV $GSOPTS \
  712.     -sOutputFile="|cat 1>&3" $GAMMAFILE -_ >/dev/null) 3>&1 \
  713. | foo2zjs -r$RES -g$DIM -p$PAPER -m$MEDIA -n$COPIES -d$DUPLEX -s$SOURCE \
  714.         -z$MODEL $COLOR $CLIP_UL $CLIP_LR $CLIP_LOG $SAVETONER \
  715.         -J "$LPJOB" -U "$USER" \
  716.         $BC $AIB $COLOR2MONO $NOPLANES $EXTRAPAD -D$DEBUG
  717.  
  718. #
  719. #    Log the command line, for debugging and problem reports
  720. #
  721. if [ -x /usr/bin/logger ]; then
  722.     logger -t "$BASENAME" -p lpr.info -- \
  723.     "$GSBIN $PAPERSIZE -g$DIM -r$RES $GSDEV $GSOPTS $GAMMAFILE"
  724.     logger -t "$BASENAME" -p lpr.info -- \
  725.     "foo2zjs -r$RES -g$DIM -p$PAPER -m$MEDIA \
  726. -n$COPIES -d$DUPLEX -s$SOURCE -z$MODEL $COLOR $CLIP_UL $CLIP_LR $CLIP_LOG \
  727. $SAVETONER $BC $AIB $COLOR2MONO $NOPLANES $EXTRAPAD"
  728. fi
  729.  
  730. #
  731. #    Remove cruft
  732. #
  733. if [ $DEBUG -eq 0 ]; then
  734.     for i in crd.ps log usecie.ps selcrd.ps
  735.     do
  736.     file="$ICCTMP.$i"
  737.     [ -f $file ] && rm -f $file
  738.     done
  739.     [ -f "$TMPFILE" ] && rm -f $TMPFILE
  740. fi
  741.  
  742. exit 0
  743.